package com.lan.util;

import com.lan.antlr.ScriptParser;
import com.lan.model.Tv;
import com.lan.model.Type;
import com.lan.model.Variable;
import org.antlr.v4.runtime.ParserRuleContext;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.List;

public class ParseUtils {


    private static void print(ParserRuleContext ctx, String name) {
        System.out.println(ctx.getRuleIndex() + " :   " + ctx.toString() + "   " + (StringUtils.isNotBlank(name) ? name : "") + " " + (StringUtils.isNotBlank(ctx.getText()) ? ctx.getText() : ""));
    }


    /**
     * 获取多少
     *
     * @param context
     * @return
     */
    public static List<Tv> getNameList(ScriptParser.PropertysExpContext context) {
//        print(context, "getNameList");
        String name = context.name().getText();
        List<Tv> tList = new ArrayList<>();
        Tv tv = new Tv(Type.String, name);
        tList.add(tv);
        List<ScriptParser.PropertyExpContext> list = context.propertyExp();
        if (list != null && list.size() > 0) {
            for (int i = 0; i < list.size(); i++) {
                ScriptParser.PropertyExpContext item = list.get(i);
//                ScriptParser.NameContext nameContext = item.name();
                if (item.name() == null && item.INTEGER_LITERAL() == null) {
                    throw new RuntimeException("语法错误，请检查:" + StringUtils.join(tList, "."));
                }
                if (item.INTEGER_LITERAL() != null) {
                    tv = new Tv(Type.Integer, Integer.valueOf(item.INTEGER_LITERAL().getText()));
                } else if (item.name() != null) {
                    tv = new Tv(Type.String, item.name().getText());
                }
                tList.add(tv);
            }
        }
        return tList;
    }

//
//    public static void varType(Variable variable, ScriptParser.PrimaryContext primaryContext) {
//        if (primaryContext.literal() != null) {
//            ScriptParser.LiteralContext literalContext = primaryContext.literal();
//            if (literalContext.INTEGER_LITERAL() != null) {
//                variable.setType(Type.Integer);
//                variable.setValue(Integer.valueOf(literalContext.INTEGER_LITERAL().getText()));
//            } else if (literalContext.FLOAT_LITERAL() != null) {
//                variable.setType(Type.Float);
//                variable.setValue(Float.valueOf(literalContext.FLOAT_LITERAL().getText()));
//            } else if (literalContext.BOOL_LITERAL() != null) {
//                variable.setType(Type.Boolean);
//                variable.setValue(Boolean.valueOf(literalContext.BOOL_LITERAL().getText()));
//            } else if (literalContext.STRING_LITERAL() != null) {
//                variable.setType(Type.String);
//                variable.setValue(literalContext.STRING_LITERAL().getText());
//            }
//        }
//    }


}
